#include "styleloader.h"
#include <mutex>
#include <QFile>
#include <QDebug>

//staatic 修饰的变量需要在class外面初始化
std::unique_ptr<StyleLoader> StyleLoader::instance_ = nullptr;

StyleLoader::~StyleLoader()
{


}

//这个函数是线程安全的单例模式实现，它利用C++11标准库的std::call_once确保在多线程环境下只创建一次实例，
//并通过智能指针管理实例的生命周期。
//调用StyleLoader::getInstance()会返回唯一的实例指针，如果第一次调用则创建实例。
StyleLoader *StyleLoader::getInstance()
{
    static std::once_flag flag;
    std::call_once(flag,[&](){
        instance_.reset(new StyleLoader());
    });
    return instance_.get();
}

//这个函数实现了从指定路径读取QSS样式表文件，并将其应用到指定的控件上。
//在读取文件时需要注意文件编码和错误处理，以确保样式表正确加载。
void StyleLoader::loadStyle(const QString &filepath, QWidget *w)
{
    QFile file(filepath);
    if(!file.open(QIODevice::ReadOnly | QIODevice::Text)){
        qDebug()<<"文件打开失败";
        return;
    }
    QString qss = QString::fromUtf8(file.readAll().data());
    w->setStyleSheet(qss);

}

StyleLoader::StyleLoader()
{

}
